﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Cos.Core.Model.Template;
using Cos.Core.NHibernate;
using Cos.Core.NHibernate.Util;
using Cos.Module.Template.Data;
using Microsoft.Practices.Unity;
using NHibernate;

namespace Cos.Module.Template.NHibernate
{
    public class DataTypeRepository : RepositoryBase, IDataTypeRepository
    {
        [InjectionConstructor]
        public DataTypeRepository(ISessionFactory sessionFactory)
            : base(sessionFactory)
        {
        }

        public DataType GetDataType(int dataTypeId)
        {
            var dataType = this.CurrentSession.Get<DataTypeDataModel>(dataTypeId);

            if (dataType == null)
            {
                return null;
            }

            return dataType.ToDataType();
        }

        public IEnumerable<DataType> GetDataTypes()
        {
            return this.CurrentSession.CreateCriteria<DataTypeDataModel>().List<DataTypeDataModel>().Select(d => d.ToDataType());
        }

        public DataType SaveDataType(DataType dataType)
        {
            var dataTypeDataModel = this.CurrentSession.Get<DataTypeDataModel>(dataType.Id).ToDataTypeDataModel(dataType);

            this.CurrentSession.SaveOrUpdate(dataTypeDataModel);

            this.CurrentSession.Flush();

            return dataTypeDataModel.ToDataType();
        }
    }
}
